Skip to content

Conversation

odersky
Copy link
Contributor

@odersky odersky commented Jan 29, 2021

  • Replace wildcard import _ with *, which is what basically all other languages use
  • Replace renaming => with a soft keyword as.
  • Allow as outside braces, as in
    import scala.collection.mutable as mut
    import NumPy as np

From the doc page:

The syntax of wildcard and renaming imports (and exports) has changed.

Wildcard Imports

Wildcard imports are now expressed with * instead of underscore. Example:

import scala.annotation.*  // imports everything in the annotation package

If you want to import a member named * specifically, you can use backticks around it.

object A:
   def * = ...
   def min = ...

object B:
  import A.`*`   // imports just `*`

object C:
  import A.*     // imports everything in A

Renaming Imports

To rename or exclude an import, we now use as instead of =>. A single renaming import no longer needs to be enclosed in braces. Examples:

import A.{min as minimum, `*` as multiply}
import Predef.{augmentString as _, *}     // imports everything except augmentString
import scala.annotation as ann
import java as j

Migration

To support cross-building, Scala 3.0 supports the old import syntax with _ for wildcards and => for renamings in addition to the new one. The old syntax
will be dropped in a future versions. Automatic rewritings from old to new syntax
are offered under settings -source 3.1-migration -rewrite.

Syntax

Import            ::=  ‘import’ ImportExpr {‘,’ ImportExpr}
Export            ::=  ‘export’ ImportExpr {‘,’ ImportExpr}
ImportExpr        ::=  SimpleRef {‘.’ id} ‘.’ ImportSpec
ImportSpec        ::=  NamedSelector
                    |  WildcardSelector
                    | ‘{’ ImportSelectors) ‘}’
NamedSelector     ::=  id [‘as’ (id | ‘_’)]
WildCardSelector  ::=  ‘*' | ‘given’ [InfixType]
ImportSelectors   ::=  NamedSelector [‘,’ ImportSelectors]
                    |  WildCardSelector {‘,’ WildCardSelector}

@odersky odersky force-pushed the change-imports branch 2 times, most recently from 4df21b0 to 46fcfd6 Compare January 30, 2021 13:04
@odersky
Copy link
Contributor Author

odersky commented Jan 30, 2021

Based on #11240

@odersky odersky marked this pull request as ready for review January 30, 2021 17:14
@odersky odersky marked this pull request as draft January 30, 2021 17:28
@odersky odersky marked this pull request as ready for review January 31, 2021 10:49
 - Replace wildcard import `_` with `*`, which is what basically all other languages use
 - Replace renaming `=>` with a soft keyword `as`.
 - Allow `as` outside braces, as in
     ```scala
     import scala.collection.mutable as mut
     import NumPy as np
     ```
Support imports

    import a as b

where `a` is a simple identifier.
More test cases and fixes for simple renaming imports. Disallow
them for exports for now, since the primary use case of a renaming
export is not handled yet: lampepfl/dotty-feature-requests#148
@odersky odersky requested a review from liufengyun February 8, 2021 09:20
@odersky odersky assigned liufengyun and unassigned odersky Feb 8, 2021
@odersky
Copy link
Contributor Author

odersky commented Feb 8, 2021

@liufengyun Can you review the technical side here? It looks like the proposal has strong support, so we will probably go ahead and merge this.

Copy link
Contributor

@liufengyun liufengyun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Co-authored-by: Fengyun Liu <liu@fengy.me>
@liufengyun liufengyun added this to the 3.0.0-RC1 milestone Feb 8, 2021
@odersky odersky merged commit ed5ecac into scala:master Feb 8, 2021
@odersky odersky deleted the change-imports branch February 8, 2021 17:15
@anatoliykmetyuk anatoliykmetyuk added the release-notes Should be mentioned in the release notes label Feb 10, 2021
@Kordyjan Kordyjan modified the milestones: 3.0.0-RC1, 3.0.0 Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-notes Should be mentioned in the release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants